package intelligentCustomer.reasoning;

import intelligentCustomer.intent.Intent;
import intelligentCustomer.memory.UserProfile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 推理上下文
 * 存储推理过程中的中间状态和结果
 */
public class ReasoningContext {
    /** 用户查询 */
    private final String query;
    
    /** 识别的意图 */
    private final Intent intent;
    
    /** 用户档案 */
    private final UserProfile userProfile;
    
    /** 相关知识 */
    private final String relevantKnowledge;
    
    /** 推理链，记录每个推理步骤的结果 */
    private final List<String> reasoningChain = new ArrayList<>();
    
    /** 推理属性，存储推理过程中的中间结果 */
    private final Map<String, Object> attributes = new HashMap<>();
    
    /** 解决方案 */
    private String solution;
    
    /** 推理置信度 */
    private double confidence = 0.0;
    
    /** 推理是否成功 */
    private boolean successful = true;
    
    /**
     * 构造函数
     * 
     * @param query 用户查询
     * @param intent 识别的意图
     * @param userProfile 用户档案
     * @param relevantKnowledge 相关知识
     */
    public ReasoningContext(String query, Intent intent, UserProfile userProfile, String relevantKnowledge) {
        this.query = query;
        this.intent = intent;
        this.userProfile = userProfile;
        this.relevantKnowledge = relevantKnowledge;
    }
    
    /**
     * 添加推理步骤结果
     * 
     * @param stepName 步骤名称
     * @param result 步骤结果
     */
    public void addReasoningStep(String stepName, String result) {
        reasoningChain.add(stepName + ": " + result);
    }
    
    /**
     * 设置属性
     * 
     * @param key 属性键
     * @param value 属性值
     */
    public void setAttribute(String key, Object value) {
        attributes.put(key, value);
    }
    
    /**
     * 获取属性
     * 
     * @param key 属性键
     * @return 属性值
     */
    public Object getAttribute(String key) {
        return attributes.get(key);
    }
    
    /**
     * 设置解决方案
     * 
     * @param solution 解决方案
     */
    public void setSolution(String solution) {
        this.solution = solution;
    }
    
    /**
     * 设置置信度
     * 
     * @param confidence 置信度
     */
    public void setConfidence(double confidence) {
        this.confidence = confidence;
    }
    
    /**
     * 设置推理是否成功
     * 
     * @param successful 是否成功
     */
    public void setSuccessful(boolean successful) {
        this.successful = successful;
    }
    
    /**
     * 获取用户查询
     * 
     * @return 用户查询
     */
    public String getQuery() {
        return query;
    }
    
    /**
     * 获取意图
     * 
     * @return 意图
     */
    public Intent getIntent() {
        return intent;
    }
    
    /**
     * 获取用户档案
     * 
     * @return 用户档案
     */
    public UserProfile getUserProfile() {
        return userProfile;
    }
    
    /**
     * 获取相关知识
     * 
     * @return 相关知识
     */
    public String getRelevantKnowledge() {
        return relevantKnowledge;
    }
    
    /**
     * 获取推理链
     * 
     * @return 推理链
     */
    public List<String> getReasoningChain() {
        return new ArrayList<>(reasoningChain);
    }
    
    /**
     * 获取解决方案
     * 
     * @return 解决方案
     */
    public String getSolution() {
        return solution;
    }
    
    /**
     * 获取置信度
     * 
     * @return 置信度
     */
    public double getConfidence() {
        return confidence;
    }
    
    /**
     * 获取推理是否成功
     * 
     * @return 是否成功
     */
    public boolean isSuccessful() {
        return successful;
    }
} 